/**
 * 代码生成相关类型定义
 */

/** 框架类型枚举 */
export enum FrameworkType {
  SPRING_BOOT = "SPRING_BOOT",
  EXPRESS = "EXPRESS",
  FASTAPI = "FASTAPI",
  NESTJS = "NESTJS"
}

/** 数据库类型枚举 */
export enum DatabaseType {
  MYSQL = "MYSQL",
  POSTGRESQL = "POSTGRESQL",
  ORACLE = "ORACLE",
  SQL_SERVER = "SQL_SERVER"
}

/** 数据库配置 */
export interface DatabaseConfig {
  /** 数据库主机 */
  host?: string
  /** 数据库端口 */
  port?: number
  /** 数据库名 */
  database?: string
  /** 用户名 */
  username?: string
  /** 密码 */
  password?: string
  /** 字符集 */
  charset?: string
}

/** Redis配置 */
export interface RedisConfig {
  /** Redis主机 */
  host?: string
  /** Redis端口 */
  port?: number
  /** Redis密码 */
  password?: string
  /** 数据库索引 */
  database?: number
  /** 连接超时 */
  timeout?: number
}

/** JWT配置 */
export interface JwtConfig {
  /** JWT密钥 */
  secret?: string
  /** 访问令牌过期时间(秒) */
  expiration?: number
  /** 刷新令牌过期时间(秒) */
  refreshExpiration?: number
}

/** 代码生成配置 */
export interface GenerationConfig {
  /** 生成Entity */
  generateEntity?: boolean
  /** 生成DTO */
  generateDto?: boolean
  /** 生成VO */
  generateVo?: boolean
  /** 生成Mapper */
  generateMapper?: boolean
  /** 生成Service */
  generateService?: boolean
  /** 生成Controller */
  generateController?: boolean
  /** 生成配置文件 */
  generateConfig?: boolean
  /** 生成文档 */
  generateDoc?: boolean
  /** 生成测试文件 */
  generateTest?: boolean
  /** 生成Docker文件 */
  generateDocker?: boolean
  /** 使用Lombok */
  useLombok?: boolean
  /** 使用Swagger */
  useSwagger?: boolean
  /** 启用分页 */
  enablePagination?: boolean
  /** 启用缓存 */
  enableCache?: boolean
  /** 启用日志 */
  enableLogging?: boolean
  /** 启用事务 */
  enableTransaction?: boolean
  /** 启用验证 */
  enableValidation?: boolean
  /** 数据库配置 */
  database?: DatabaseConfig
  /** Redis配置 */
  redis?: RedisConfig
  /** JWT配置 */
  jwt?: JwtConfig
  /** 自定义配置 */
  customConfig?: Record<string, any>
}

/** 代码生成请求参数 */
export interface CodeGenerationRequest {
  /** 项目ID */
  projectId: number
  /** 项目名称 */
  projectName: string
  /** 项目编码 */
  projectCode: string
  /** 项目描述 */
  description?: string
  /** 框架类型 */
  frameworkType: FrameworkType
  /** 包名 */
  packageName: string
  /** 作者 */
  author?: string
  /** 版本号 */
  version?: string
  /** 数据库类型 */
  databaseType?: DatabaseType
  /** 模板ID */
  templateId?: number
  /** 要生成的表ID列表 */
  tableIds?: number[]
  /** 代码生成配置 */
  config?: GenerationConfig
}

/** 代码生成历史查询参数 */
export interface CodeGenerationHistoryQuery {
  /** 项目ID */
  projectId: number
  /** 当前页 */
  current?: number
  /** 每页大小 */
  size?: number
}

/** 增强版代码生成请求参数 */
export interface EnhancedCodeGenerationRequest {
  /** 项目名称 */
  projectName: string
  /** 包名 */
  packageName: string
  /** 作者 */
  author: string
  /** 版本号 */
  version: string
  /** 项目描述 */
  description?: string
  /** 框架类型 */
  frameworkType: string
  /** 要生成的表ID列表 */
  tableIds: number[]
  /** 数据库配置 */
  databaseConfig?: {
    type: string
    host: string
    port: number
    database: string
    username: string
    password: string
  }
  /** Redis配置 */
  redisConfig?: {
    host: string
    port: number
    password?: string
    database: number
    timeout: number
    maxActive: number
    maxWait: number
    maxIdle: number
    minIdle: number
  }
  /** JWT配置 */
  jwtConfig?: {
    secret: string
    expiration: number
    refreshExpiration: number
  }
  /** 功能开关 */
  enableSecurity: boolean
  enableRedis: boolean
  enableActuator: boolean
}

/** 项目生成响应 */
export interface ProjectGenerationResponse {
  success: boolean
  generationId?: string
  projectName?: string
  message?: string
  downloadUrl?: string
  createTime?: string
}

/** 代码预览响应 */
export interface CodePreviewResponse {
  success: boolean
  files?: Record<string, string>
  fileCount?: number
  message?: string
}

/** 模板信息 */
export interface TemplateInfo {
  name: string
  path: string
  type: string
  description: string
}